package practice_2025_8_30;

class Solution {
    /**
     * 有效的数独
     * @param board
     * @return
     */
    public boolean isValidSudoku(char[][] board) {
        // 验证已填入的数字是否有效
        // 这个数字只能在这一行、一列，以及一个 3 * 3宫格中出现一次
        // 记录每一行、每一列和每一个 3*3宫格中的数字
        boolean[][] row = new boolean[9][10];
        boolean[][] col = new boolean[9][10];
        boolean[][][] area = new boolean[3][3][10];
        int m = board.length;
        int n = board[0].length;
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                // 判断这一行是否出现过
                int k = board[i][j];
                if (k >= '0' && k <= '9') {
                    k -= '0';
                    if (row[i][k] || col[j][k] || area[i / 3][j / 3][k]) {
                        return false;
                    } else {
                        row[i][k] = true;
                        col[j][k] = true;
                        area[i / 3][j / 3][k] = true;
                    }
                }
            }
        }
        return true;
    }
}